package conf

import (
	"io/ioutil"
	//"io/ioutil"
	"log"
	"os"
	"tcp_server/common"
)

const (
	SUCCESS        = 0
	CONN_NOT_EXIT  = iota
	CONN_ERR_WRITE = iota
	CONN_ERR_READ  = iota
)

// 配置类
type JsonConfig struct {
	ServerIp      string `json:"server_addr"`     // TCP服务器地址
	MaxConnNumber int    `json:"max_conn_number"` // 最大连接数
	AuthTimeout   int64  `json:"auth_timeout"`    // 认证超时时间
	PublicKey     []byte `json:"public_key"`      // RSA公钥
	PrivateKey    []byte `json:"private_key"`     // RSA私钥
}

var Config = &JsonConfig{}

/**
 * @Description:        初始化配置
 * @param configPath    配置文件按路径
 * @param pubPath       公钥文件路径
 * @param priPath       私钥文件路径
 */
func InitJsonConfig(configPath, pubPath, priPath *string) {
	err := common.ReadJsonFile(configPath, Config)
	if err != nil {
		log.Panic("读取配置文件失败：", err)
	}

	// 判断rsa密钥对文件是否存在，不存在则生成
	_, err1 := os.Stat(*pubPath)
	_, err2 := os.Stat(*priPath)
	if os.IsNotExist(err1) || os.IsNotExist(err2) {
		common.GenerateRsaKey(common.RSA_KEY_SIZE, pubPath, priPath)
	}

	Config.PublicKey, err = ioutil.ReadFile(*pubPath)
	if err != nil {
		log.Panic("读取公钥失败：", err)
	}

	Config.PrivateKey, err = ioutil.ReadFile(*priPath)
	if err != nil {
		log.Panic("读取私钥失败：", err)
	}
}
